// 信息提示
import { Message } from 'element-ui'
// 引入用户id - token
// import { getTenantId, getAccessToken } from '@/utils/auth'
// import { getUnitUser } from '@/api/unit/unitUser'

// websocket地址
// var url = 'ws://192.168.2.30:18081/websocket/message/fire'
// var url = 'ws://192.168.2.19:48081/websocket/message/fire'
// var url = 'ws://192.168.2.11:48081/websocket/message/fire'
// var url = 'ws://localhost:48081/websocket/message/fire'
// 预生产环境
var url = 'wss://api.pre.thgykj.com/wss/websocket/message/fire'
// 生产环境
// var url = 'wss://api.thgykj.com/wss/websocket/message/fire'
// websocket实例
var ws
// 重连定时器实例
var tt
// websocket重连开关
var websocketswitch = false

// websocket对象
var websocket = {
  // websocket建立连接
  async Init () {
    // 判断浏览器是否支持websocket
    if (!'WebSocket' in window) {
      this.$modal.msgError('您的浏览器不支持WebSocket')
      return
    }
    const res = await getUnitUser()
    console.log('gffg', res)
    console.log('getTenantId()')
    // 获取用户id

    let userId = res.data
    // 创建websocket实例
    ws = new WebSocket(url + '?userId=' + userId)
    // 建立语音播报
    // getspeech()
    // 监听websocket连接
    ws.onopen = function () {
      // Message({
      //   type: 'success',
      //   message: 'websocket连接成功'
      // })
      console.log('websocket连接成功')
      // 关闭websocket重连开关
      websocketswitch = true
    }
    // 监听websocket连接错误信息
    ws.onerror = function (e) {
      // console.log('重连开关', websocketswitch)
      console.log('数据传输发生错误', e)
      // Message({
      //   message: 'websocket传输发生错误',
      //   type: 'error'
      // })
      console.error(e)
      // 开启websocket重连开关
      websocketswitch = false
      // 打开重连
      reconnect()
    }
    // 监听websocket接受消息
    ws.onmessage = function (e) {
      console.log('接收后端消息:' + e.data)
      // 心跳消息不做处理
      if (e.data === 'ok') {
        return
      }
      // Message({
      //   message: e.data,
      //   type: 'waring'
      // })
      // 语音播报信息
      // let msg = e.data
      // speech.speak({ text: msg }).then(() => {
      //   console.log('播报成功')
      // })
    }
  },
  // websocket连接关闭方法
  Close () {
    //关闭断开重连机制
    websocketswitch = true
    ws.close()
  },
  // websocket发送信息方法
  Send (data) {
    // 处理发送数据JSON字符串
    let msg = JSON.stringify(data)
    // 发送消息给后端
    ws.send(msg)
  },
  // 暴露websocket实例
  getwebsocket () {
    return ws
  }
}

// 监听窗口关闭事件，当窗口关闭时-每一个页面关闭都会触发-扩张需求业务
window.onbeforeunload = function () {
  console.log('测试方法执行了')
}

// 浏览器刷新重新连接
// 刷新页面后需要重连-并且是在登录之后
// if (window.performance.navigation.type == 1 && getAccessToken()) {
//   console.log('浏览器刷新了')
//   //刷新后重连
//   websocket.Init()
// }
// 重连方法
function reconnect () {
  console.log('重连开关', websocketswitch)
  // 判断是否主动关闭连接
  if (websocketswitch) {
    return
  }
  // 重连定时器-每次websocket错误方法onerror触发他都会触发
  // 写个定时器-防止websocket每一秒重连
  tt && clearTimeout(tt)
  tt = setTimeout(function () {
    console.log('执行断线重连...')
    websocket.Init()
  }, 4000)
}

// 暴露对象
export default websocket
